<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
    	<script type="text/javascript">
    		function fn(){
    			var n = 1;

    			var fn1 = function(){
    				n++;
    				console.log(n)
    			}

    			return fn1;
    		}

    		var fn2 = fn();
    		fn2();  //2
    		fn2();  //3
    		fn2();  //4

    		// 闭包的作用：保存变量的值不被销毁   所以下面 输出 2，3，4
    		// 函数可以作为返回值
    		// 函数的嵌套形成闭包
    		

    		var data = [];

    		for (var i = 0; i < 3; i++) {
    			data[i] = function(){
    				console.log(i)
    			}
    		};
    		// js 是没有块级作用域的
    		data[0]();  // 3
    		data[1]();  // 3
    		data[2]();  // 3

    		var data_a = [];

    		for (var i = 0; i < 3; i++) {
    			data_a[i] = (function(k){


    				return function(){
    					console.log(k)
    				}    // 这里用到了闭包 。


    			})(i)
    		};


    		data_a[0]();  // 0
    		data_a[1]();  // 1
    		data_a[2]();  // 2
    	</script>
    </body>
</html>